import { warning } from '@/utils/message'
import i18n from '@/i18n'

/**
 * 设置表格样式
 * @param row
 * @returns {string}
 */
export function tableCellStyle (row) {
  // 第一列设置为左对齐
  if (row.columnIndex === 1) {
    return 'text-align:left'
  }
}

/**
 * 获取分页每页显示条数列表
 * @returns {number[]}
 */
export function getPageSizes () {
  return [15, 50, 100]
}

/**
 * 获取分页参数
 * @returns {{pageIndex: number, pageSize: number}}
 */
export function getPage () {
  return { pageIndex: 1, pageSize: 15 }
}

/**
 * 获取选择组件分页每页显示条数列表
 * @returns {number[]}
 */
export function getPickPageSizes () {
  return [10, 20, 50, 100]
}

/**
 * 获取选择组件分页参数
 * @returns {{pageIndex: number, pageSize: number}}
 */
export function getPickPage () {
  return { pageIndex: 1, pageSize: 10 }
}

/**
 * 上移操作
 * @param dataList
 * @param index
 * @return {*}
 */
export function moveUp (dataList, index) {
  if (index === 0) {
    warning(i18n.t('common.canNotMoveUp'))
    return dataList
  } else {
    let upData = dataList[index - 1]
    dataList.splice(index - 1, 1)
    dataList.splice(index, 0, upData)
    return dataList
  }
}

/**
 * 下移操作
 * @param dataList
 * @param index
 * @return {*}
 */
export function moveDown (dataList, index) {
  if (index + 1 === dataList.length) {
    warning(i18n.t('common.canNotMoveDown'))
    return dataList
  } else {
    let downData = dataList[index + 1]
    dataList.splice(index + 1, 1)
    dataList.splice(index, 0, downData)
    return dataList
  }
}

/**
 * 单选
 * @param dataList
 * @param keyName
 * @return {null|*}
 */
export function getSelectedId (dataList, keyName) {
  if (dataList.length === 0) {
    warning(i18n.t(`common.selectOne`))
    return null
  } else if (dataList.length > 1) {
    warning(i18n.t('common.onlyOne'))
    return null
  } else {
    return dataList[0][keyName]
  }
}

/**
 * 多选
 * @param dataList
 * @param keyName
 * @return {null|*}
 */
export function getSelectedIds (dataList, keyName) {
  let ids = dataList.map(item => {
    return item[keyName]
  })
  if (ids.length === 0) {
    warning(i18n.t('common.leastOne'))
    return null
  } else {
    return ids
  }
}

/**
 * 获取ID列表
 * @param dataList
 * @return {null|*}
 */
export function getSelectedIdList (dataList) {
  return dataList.map(item => {
    return item['id']
  })
}

/**
 * 删除最后一页的所有数据时跳转到上一页
 * @param totalCount
 * @param pageSize
 * @param currentIndex
 * @param deleteSize
 * @return {number}
 */
export function getDeleteAfterPageNumber ({ totalCount, pageSize, currentIndex = 1, deleteSize } = {}) {
  const totalPage = Math.ceil((totalCount - deleteSize) / pageSize)
  let newPageIndex = currentIndex > totalPage ? totalPage : currentIndex
  newPageIndex = totalPage < 1 ? 1 : newPageIndex
  return newPageIndex
}

/**
 * 获取筛选参数列表并去重
 * @param dataList
 * @param keyName
 * @return {null|*}
 */
export function getFilters (dataList, keyName) {
  if (dataList.length === 0) {
    return []
  }
  let filters = dataList.map(item => {
    return { text: item[keyName], value: item[keyName] }
  })
  let res = new Map()
  return filters.length === 0
    ? []
    : filters.filter((arr) => !res.has(arr.value) && res.set(arr.value, 1)).sort(sortBy('value'))
}

/**
 * 数组根据数组对象中的某个属性值进行排序的方法
 * 使用例子：newArray.sort(sortBy('number',false)) //表示根据number属性降序排列;若第二个参数不传递，默认表示升序排序
 * @param attr 排序的属性 如number属性
 * @param rev true表示升序排列，false降序排序
 * */
export function sortBy (attr, rev) {
  if (rev === undefined) {
    rev = 1
  } else {
    rev = (rev) ? 1 : -1
  }
  return function (a, b) {
    a = a[attr]
    b = b[attr]
    if (a < b) {
      return rev * -1
    }
    if (a > b) {
      return rev
    }
    return 0
  }
}

/**
 * 设置无限分页下一页按钮状态
 * @param listLength 该页的数据长度
 * @param pageSize 页面大小
 * @return {boolean} 返回是否设置了下一页按钮的状态
 */
export function setPaginationNextButton (listLength, pageSize) {
  if (listLength < pageSize) {
    setDisabledPaginationNextButton()
  } else {
    setNonDisabledPaginationNextButton()
  }
}

/**
 * 设置无限分页组件中下一页按钮无效
 */
export function setDisabledPaginationNextButton () {
  let disabledPaginationNextButtonList = document.getElementsByClassName('my-unlimited-pagination')
  if (disabledPaginationNextButtonList && disabledPaginationNextButtonList.length > 0) {
    for (let i = 0; i < disabledPaginationNextButtonList.length; i++) {
      let nextButtonElements = disabledPaginationNextButtonList[i].getElementsByTagName('button')
      if (nextButtonElements && nextButtonElements.length > 1) {
        nextButtonElements[1].disabled = true
      }
    }
  }
}

/**
 * 设置无限分页组件中下一页按钮有效
 */
export function setNonDisabledPaginationNextButton () {
  let disabledPaginationNextButtonList = document.getElementsByClassName('my-unlimited-pagination')
  if (disabledPaginationNextButtonList && disabledPaginationNextButtonList.length > 0) {
    for (let i = 0; i < disabledPaginationNextButtonList.length; i++) {
      let nextButtonElements = disabledPaginationNextButtonList[i].getElementsByTagName('button')
      if (nextButtonElements && nextButtonElements.length > 1) {
        nextButtonElements[1].disabled = false
      }
    }
  }
}
